package com.mk.basic;

/**
 * @author 孔德成
 * @slogan 致敬大师，致敬未来的你
 * @date 2021/10/4 11:27 下午
 * @desc Integer a = 127 与 Integer b = 127 相等吗？
 * 大部分数据操作都是集中在有限的、较小的数值范围，因而，
 * 在 Java 5 中新增了静态工厂方法 valueOf，在调用它的时候会利用一个缓存机制，带来了明显的性能改进。
 * 按照 Javadoc，这个值默认缓存是 -128 到 127 之间。
 */
public class IntAndInteger {
    public static void main(String[] args) {
        // 1. 对于对象引用类型，== 比较的是对象的内存地址
        // 2. 对于基本数据类型，== 比较的是值
        // 3. 包装类型与基本类型比较时，会自动拆箱，然后再比较
        // 3. 如果整型字面量的值在 -128到127之间，那么自动装箱时不会 new 新的 Integer 对象， 而是直接引用常量池中的 Integer 对象
        Integer a = new Integer(3);
        Integer b = 3;  // 将3自动装箱成Integer类型
        int c = 3;
        System.out.println(a == b); // false 两个引用没有引用同一对象
        System.out.println(a == c); // true a自动拆箱成int类型再和c比较
        System.out.println(b == c); // true

        Integer a1 = 128;
        Integer b1 = 128;
        System.out.println(a1 == b1); // false

        Integer a2 = 127;
        Integer b2 = 127;
        System.out.println(a2 == b2); // true
    }
}
